//
//  AFHTTPSessionManager.h
//
//  Created by 刘川 on 2018/05/23.
//  Copyright © 2017年 com.YiQiLe. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "AFNetworking.h"

@class AFHTTPSessionManager;

typedef NS_ENUM(NSUInteger, NetworkStatusType) {
    NetworkStatusUnknown,           // 未知网络
    NetworkStatusNotReachable,      // 无网络
    NetworkStatusReachableViaWWAN,  // 手机网络
    NetworkStatusReachableViaWiFi   // WIFI网络
};

typedef NS_ENUM(NSInteger, RequestType){
    RequestTypeGet,                 // get请求
    RequestTypePost                 // post请求
};

/**  网络状态的Block */
typedef void(^networkStatus)(NetworkStatusType status);

/** 进度 */
typedef void (^httpProgress)(NSProgress *progress);

/** 请求回调Block */
typedef void (^callbackBlock)(id response, NSError * error);

@interface NetworkManager : NSObject

/**
 实时获取网络状态,通过Block回调实时获取
 */
+ (void)networkStatusWithBlock:(networkStatus)networkStatus;

/**
 有网YES, 无网:NO
*/
+ (BOOL)isNetwork;

/**
 手机网络:YES, 反之:NO
 */
+ (BOOL)isWWANNetwork;

/**
 WiFi网络:YES, 反之:NO
 */
+ (BOOL)isWiFiNetwork;

/**
 取消所有HTTP请求
 */
+ (void)cancelAllRequest;

/**
 取消指定URL的HTTP请求
 */
+ (void)cancelRequestWithURL:(NSString *)URL;

/**
 单例
 */
+ (AFHTTPSessionManager *)sharedManager;


/**
 HTTP请求

 @param type            请求类型
 @param url           请求url
 @param params          请求参数
 @param callbackBlock   成功失败回调
 @return                请求会话
 */
+ (NSURLSessionTask *)requestType:(RequestType) type
                              url:(NSString *) url
                           params:(NSDictionary *) params
                    callbackBlock:(callbackBlock) callbackBlock;


/**
 上传单/多张图片
 @param URL              请求地址
 @param parameters       请求参数
 @param name             图片对应服务器上的字段
 @param images           图片数组
 @param fileNames        图片文件名数组, 可以为nil, 数组内的文件名默认为当前日期时间"yyyyMMddHHmmss"
 @param imageScale       图片文件压缩比 范围 (0.f ~ 1.f)
 @param imageType        图片文件的类型,例:png、jpg(默认类型)....
 @param progress         上传进度信息
 @param callbackBlock    请求回调
 @return                 返回的对象可取消请求,调用cancel方法
 */
+ (NSURLSessionTask *)uploadImagesWithURL:(NSString *) URL
                               parameters:(id) parameters
                                     name:(NSString *) name
                                   images:(NSArray<UIImage *> *) images
                                fileNames:(NSArray<NSString *> *) fileNames
                               imageScale:(CGFloat) imageScale
                                imageType:(NSString *) imageType
                                 progress:(httpProgress) progress
                            callbackBlock:(callbackBlock) callbackBlock;

@end
